iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 23
0
Modern Web

From Django 1.11 to Django 2.1 系列 第 23

Day23 : Django 命名空間

  • 分享至 

  • xImage
  •  

今天要延續 Day22 所提到的內文,將 url 冠上它各自的綽號 name

urlpatterns = [
    path('', views.showtemplate, name='index'),
    path('<int:id>/', views.singleVendor, name='vendor_id'),
    path('create', views.vendor_create_view, name = 'create'),
    ...略
]

從上面的內容我們可以將 name 用熟悉的綽號代替

  • '' : 小美
  • '<int:id>' : 阿明
  • 'create' : 小鐵

但是此時你的你應該查覺到的!!

在我人生中,相同綽號的不只一個人阿 !! 沒有錯,就算是 小美、阿明或是小鐵 待在 河馬班,但是不代表說長頸鹿班就不會有小美、阿明或是小鐵阿!

https://ithelp.ithome.com.tw/upload/images/20181023/20111829PjOz5SVQmF.jpg
(小美 : 關我屁事

或許,我們能將能將綽號取的更有獨特性一點 惣流·明日香·蘭格雷

https://ithelp.ithome.com.tw/upload/images/20181023/20111829UsXmneDnY6.jpg

挖哩咧,要記住這名字,跟要我背出每間學校的IP位址一樣困難

因此,為了避免 name 重複性的問題,我們勢必要在該 urls.py 加上 班級名稱,而在 Django 裡面,我們稱作它為 app_name

也就是說,我們的 urls.py 要修改成這樣

from django.contrib import admin
from django.urls import path

from . import views
app_name = 'vendors' # 新增
urlpatterns = [
    path('', views.showtemplate, name='index'),
    path('<int:id>/', views.singleVendor, name='vendor_id'),
    path('create', views.vendor_create_view, name='create'),
    ...略
]

透過這個方法我們就能避免重複的名字發生,並且可以知道,這是屬於河馬班的阿明 還是 長頸鹿班的小美 ^^

等一下....! 修改還沒完成

如果你還記得,這個 url name 最初就是要給 reverse 函式作轉換用的,所以原先的 Model的 reverse也要修改,不然 Django 就會跟你抱怨你只告訴他對象,而沒有告訴她班級唷!

class Vendor(models.Model):
	vendor_name = models.CharField(max_length = 20) # 攤販的名稱
	store_name = models.CharField(max_length = 10) # 攤販店家的名稱
	phone_number = models.CharField(max_length = 20) # 攤販的電話號碼
	address = models.CharField(max_length = 100) # 攤販的地址

	def get_absolute_url(self):
		return reverse("vendors:vendor_id", kwargs={"id": self.id}) # 修改

如此一來,網頁就能正常顯示囉!
https://ithelp.ithome.com.tw/upload/images/20181023/20111829J7ER7DLX2K.jpg

今日小節

今天內容相對簡單,大家應該都能秒懂,不過後續還有一些命名空間的心得分享,只好等我一更囉 ^^"

1024 一更, 更新內容太多,直接新增一篇在 Day 24 囉!


上一篇
Day22 : Django urls name
下一篇
Day24 : 深入探討 命名空間
系列文
From Django 1.11 to Django 2.1 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言